import FireBallA from "../skill/imdSkillImpl/FireBallA"
import SnakeWave from "../skill/imdSkillImpl/SnakeWave"
import ZhenDangAOfBoss from "../skill/imdSkillImpl/ZhenDangAOfBoss"
import { AttachPointsType, DmgTypeKey, UnitAttrStruct } from "../types/L_Type"
import { BuffSkillClassConstructor, DmgSkillClassConstructor } from "../types/lbase"



/**技能共有的基础属性 */
export type SkillAttrConfigBase={
    name:string,
    desc?:string,     //简单描述
    radius:number,    //技能影响范围半径
    trgProb:number,   //触发系数  允许触发系数>100 以放大攻击特效 现在计算方式是A*B 参考AdditDamageSts.TrgAndExecAdditDamage()
    addPit?:AttachPointsType, //特效附加点
    effectPath?:string,  //特效模型路径
    onceHit?:boolean     //是否只造成一次伤害
    playerSkillField?:PlayerSkillField   //如果是玩家技能的一些配置设定
    learnIconPath?:string    //学习技能图标路径
  }  
  & {'attrST':UnitAttrStruct} 


/**伤害类技能共有的基础属性 */
export type DmgTypeSkillAttrConfigBase={
    /**伤害类型 */
    dmgTypeKey:DmgTypeKey,
    /**单次伤害 */
    onceDmgVal:number,
    /**最大造成伤害倍率（即N次）  超出提前停止  */
    totalDmgMulLim?:number,
    /**物理特性可以获取的%比攻击力转换为特效base伤害系数  直乘倍率(小数) */
    physicDmgMul:number,
    /**法术特性可以获取的%比法伤转换为特效base伤害系数  直乘倍率(小数)  */
    migicDmgMul:number,
    /**技能等级对基础伤害的加成修正 范围0.x */
    dmgLvlFix:number
} & SkillAttrConfigBase


//带弹道的技能配置 建议都统一使用此方式来配置
export type ArrowConfigVal={
    arrowUnitIdStr:string,  //arrowUnitIdStr:技能投射物马甲对应的单位id字符串 类似'abxo'
    dis:number,             //dis:箭矢移动距离
    disPerSecond:number,     //disPerSecond：箭矢每秒移动距离
    onceHitLimitDis?:number     //箭矢至少移动多少距离才进行一次选取  防止选取过于频繁效率低的问题  (不设置值为每次移动选取)       
}  



/**
 * 崩解打击相关的攻防属性  (攻防都有 集中配置 大多数时候是攻防2选1)
 */
export type SkillTrackStrikeField={
    tenaReduce?:number,   //技削韧
    btVal?:number,        //技能破招值
    loseDefVal?:number    //技能防御架势丢失
}

export type SkillLearnType='Q' | 'W' | 'E' | 'R' | 'D' | 'F' 

/**
 * 如果是玩家单位技能的一些属性设定
 */
export type PlayerSkillField={
    lType:SkillLearnType   //学习类型(快捷键位置对应技能分类)   
    lvlUpExpParams:number                    //技能升级修正系数
}

export type IMDSkillConfigVal=DmgTypeSkillAttrConfigBase & {skillType:'imdmg',impClass:DmgSkillClassConstructor,arrowConfig?:ArrowConfigVal,crackStrikeConfig?:SkillTrackStrikeField}  
export type DOTSkillConfigVal=DmgTypeSkillAttrConfigBase & {skillType:'dot',durationSec:number,intervalSec:number,impClass:DmgSkillClassConstructor,arrowConfig?:ArrowConfigVal,crackStrikeConfig?:SkillTrackStrikeField} 
//buff debuff类型也设置元素类型  方便做类别增强？例如所有火焰技能效果+x%
export type BUFFSkillConfigVal=SkillAttrConfigBase & {skillType:'buff',elementType:DmgTypeKey,durationSec:number,val:number,impClass:BuffSkillClassConstructor,arrowConfig?:ArrowConfigVal}
export type DEBUFFSkillConfigVal=SkillAttrConfigBase & {skillType:'debuff',elementType:DmgTypeKey,durationSec:number,val:number,impClass:BuffSkillClassConstructor,arrowConfig?:ArrowConfigVal}
export type IMDSkillConfigRecord = Record<string,IMDSkillConfigVal >
export type DOTSkillConfigRecord = Record<string,DOTSkillConfigVal >
export type BUFFSkillConfigRecord = Record<string,BUFFSkillConfigVal >
export type DEBUFFSkillConfigRecord = Record<string,DEBUFFSkillConfigVal >

export type AllSkillKey=keyof IMDSkillConfigRecord | keyof DOTSkillConfigRecord | keyof BUFFSkillConfigRecord | keyof DEBUFFSkillConfigRecord


export const IMDSkillConfig:IMDSkillConfigRecord={
    'IAXA':{
        name:'火球',
        desc:'直线模版火球',
        skillType:'imdmg',       //技能类型
        dmgTypeKey:'fire',       //伤害类型  
        onceDmgVal:100,          //单次伤害
        totalDmgMulLim:3,         //最大造成伤害倍率（即N次）  超出提前停止  
        attrST:{attrs:{hit:300}},    //技能属性修正
        radius:100,                  //选取半径
        trgProb:150,                  //攻击特效触发系数
        addPit:'chest',              //命中后特效附加点
        effectPath:'333/fireball.mdx', //命中后特效模型路径
        onceHit:true,               //是否只造成一次伤害
        physicDmgMul:0,           
        migicDmgMul:0, 
        dmgLvlFix:0.2,         
        arrowConfig:{                //投射物技能通用配置
            arrowUnitIdStr:'abx1',   //投射物单位id
            dis:50,                  //飞行距离   
            disPerSecond:100,        //飞行速度
            onceHitLimitDis:10       //每飞行X距离造成一次伤害判定
        },
        playerSkillField:{       //作为玩家技能使用的技能配置限制
            lType:'Q',                //是Q类技能(Q快捷键)
            lvlUpExpParams:1.1       //升级经验参数
        },
        impClass:FireBallA,           //具体实现类
        learnIconPath:"ReplaceableTextures\\CommandButtons\\BTNSirenAdept.blp"
    },
    'SHEW':{
        name:'蛇形震荡波',
        desc:'自定义移动轨迹模版箭矢',
        skillType:'imdmg',       //技能类型
        dmgTypeKey:'nothing',       //伤害类型  
        onceDmgVal:100,          //单次伤害
        totalDmgMulLim:15,         //最大造成伤害倍率（即N次）  超出提前停止  
        attrST:{attrs:{hit:300}},    //技能属性修正
        radius:100,                  //选取半径
        trgProb:150,                  //攻击特效触发系数
        addPit:'chest',              //命中后特效附加点
        effectPath:'333/shakex.mdx', //命中后特效模型路径
        onceHit:true,               //是否只造成一次伤害
        physicDmgMul:0,           
        migicDmgMul:0, 
        dmgLvlFix:0.2,         
        arrowConfig:{                //投射物技能通用配置
            arrowUnitIdStr:'abx2',   //投射物单位id
            dis:30,                  //飞行距离   
            disPerSecond:100,        //飞行速度
            onceHitLimitDis:15       //每飞行X距离造成一次伤害判定
        },
        playerSkillField:{       //作为玩家技能使用的技能配置限制
            lType:'Q',                //是Q类技能(Q快捷键)
            lvlUpExpParams:1.1       //升级经验参数
        },
        impClass:SnakeWave,           //具体实现类
        learnIconPath:"ReplaceableTextures\\CommandButtons\\BTNMaskOfDeath.blp"
    },
    'XUZH':{
        name:'蓄力震击(BOSS)',
        desc:'失衡蓄力简单BOSS技能演示',
        skillType:'imdmg',       //技能类型
        dmgTypeKey:'nothing',       //伤害类型  
        onceDmgVal:100,          //单次伤害
        totalDmgMulLim:15,         //最大造成伤害倍率（即N次）  超出提前停止  
        attrST:{attrs:{hit:300}},    //技能属性修正
        radius:100,                  //选取半径
        trgProb:150,                  //攻击特效触发系数
        addPit:'chest',              //命中后特效附加点
        effectPath:'333/zhendang.mdx', //命中后特效模型路径
        onceHit:true,               //是否只造成一次伤害
        physicDmgMul:0,           
        migicDmgMul:0, 
        dmgLvlFix:0.2,         
        crackStrikeConfig:{
            btVal:50,               //破招值
            tenaReduce:20,           //削韧值
            loseDefVal:200           //失去防御架势
        },
        playerSkillField:{       //作为玩家技能使用的技能配置限制
            lType:'Q',                //是Q类技能(Q快捷键)
            lvlUpExpParams:1.1       //升级经验参数
        },
        impClass:ZhenDangAOfBoss,           //具体实现类
        learnIconPath:"ReplaceableTextures\\CommandButtons\\BTNSteelMelee.blp"
    },
    'YZJL':{
        name:'一指惊雷',
        desc:'单体雷击',
        skillType:'imdmg',       //技能类型
        dmgTypeKey:'thunder',       //伤害类型  
        onceDmgVal:100,          //单次伤害
        totalDmgMulLim:3,         //最大造成伤害倍率（即N次）  超出提前停止  
        attrST:{attrs:{hit:300}},    //技能属性修正
        radius:100,                  //选取半径
        trgProb:150,                  //攻击特效触发系数
        addPit:'chest',              //命中后特效附加点
        effectPath:'333/fireball.mdx', //命中后特效模型路径
        onceHit:true,               //是否只造成一次伤害
        physicDmgMul:0,           
        migicDmgMul:0, 
        dmgLvlFix:0.2,         
        arrowConfig:{                //投射物技能通用配置
            arrowUnitIdStr:'abx1',   //投射物单位id
            dis:50,                  //飞行距离   
            disPerSecond:100,        //飞行速度
            onceHitLimitDis:10       //每飞行X距离造成一次伤害判定
        },
        playerSkillField:{       //作为玩家技能使用的技能配置限制
            lType:'W',                //是Q类技能(Q快捷键)
            lvlUpExpParams:1.1       //升级经验参数
        },
        impClass:FireBallA,           //具体实现类
        learnIconPath:"ReplaceableTextures\\CommandButtons\\BTNLightningShield.blp"
    },
    'DUDU':{
        name:'毒沼池',
        desc:'范围毒+减速',
        skillType:'imdmg',       //技能类型
        dmgTypeKey:'poison',       //伤害类型  
        onceDmgVal:100,          //单次伤害
        totalDmgMulLim:3,         //最大造成伤害倍率（即N次）  超出提前停止  
        attrST:{attrs:{hit:300}},    //技能属性修正
        radius:100,                  //选取半径
        trgProb:150,                  //攻击特效触发系数
        addPit:'chest',              //命中后特效附加点
        effectPath:'333/fireball.mdx', //命中后特效模型路径
        onceHit:true,               //是否只造成一次伤害
        physicDmgMul:0,           
        migicDmgMul:0, 
        dmgLvlFix:0.2,         
        arrowConfig:{                //投射物技能通用配置
            arrowUnitIdStr:'abx1',   //投射物单位id
            dis:50,                  //飞行距离   
            disPerSecond:100,        //飞行速度
            onceHitLimitDis:10       //每飞行X距离造成一次伤害判定
        },
        playerSkillField:{       //作为玩家技能使用的技能配置限制
            lType:'W',                //是Q类技能(Q快捷键)
            lvlUpExpParams:1.1       //升级经验参数
        },
        impClass:FireBallA,           //具体实现类
        learnIconPath:"ReplaceableTextures\\CommandButtons\\BTNEntanglingRoots.blp"
    },
    'ZHUA':{
        name:'爪击',
        desc:'小范围物理爪击',
        skillType:'imdmg',       //技能类型
        dmgTypeKey:'nothing',       //伤害类型  
        onceDmgVal:100,          //单次伤害
        totalDmgMulLim:3,         //最大造成伤害倍率（即N次）  超出提前停止  
        attrST:{attrs:{hit:300}},    //技能属性修正
        radius:100,                  //选取半径
        trgProb:150,                  //攻击特效触发系数
        addPit:'chest',              //命中后特效附加点
        effectPath:'333/fireball.mdx', //命中后特效模型路径
        onceHit:true,               //是否只造成一次伤害
        physicDmgMul:0,           
        migicDmgMul:0, 
        dmgLvlFix:0.2,         
        arrowConfig:{                //投射物技能通用配置
            arrowUnitIdStr:'abx1',   //投射物单位id
            dis:50,                  //飞行距离   
            disPerSecond:100,        //飞行速度
            onceHitLimitDis:10       //每飞行X距离造成一次伤害判定
        },
        playerSkillField:{       //作为玩家技能使用的技能配置限制
            lType:'Q',                //是Q类技能(Q快捷键)
            lvlUpExpParams:1.1       //升级经验参数
        },
        impClass:FireBallA,           //具体实现类
        learnIconPath:"ReplaceableTextures\\CommandButtons\\BTNGhoulFrenzy.blp"
    },
    'LUAN':{
        name:'乱射',
        desc:'弓箭技',
        skillType:'imdmg',       //技能类型
        dmgTypeKey:'nothing',       //伤害类型  
        onceDmgVal:100,          //单次伤害
        totalDmgMulLim:3,         //最大造成伤害倍率（即N次）  超出提前停止  
        attrST:{attrs:{hit:300}},    //技能属性修正
        radius:100,                  //选取半径
        trgProb:150,                  //攻击特效触发系数
        addPit:'chest',              //命中后特效附加点
        effectPath:'333/fireball.mdx', //命中后特效模型路径
        onceHit:true,               //是否只造成一次伤害
        physicDmgMul:0,           
        migicDmgMul:0, 
        dmgLvlFix:0.2,         
        arrowConfig:{                //投射物技能通用配置
            arrowUnitIdStr:'abx1',   //投射物单位id
            dis:50,                  //飞行距离   
            disPerSecond:100,        //飞行速度
            onceHitLimitDis:10       //每飞行X距离造成一次伤害判定
        },
        playerSkillField:{       //作为玩家技能使用的技能配置限制
            lType:'Q',                //是Q类技能(Q快捷键)
            lvlUpExpParams:1.1       //升级经验参数
        },
        impClass:FireBallA,           //具体实现类
        learnIconPath:"ReplaceableTextures\\CommandButtons\\BTNImprovedBows.blp"
    },
    'PIKK':{
        name:'破甲横扫',
        desc:'3单位物理横扫',
        skillType:'imdmg',       //技能类型
        dmgTypeKey:'nothing',       //伤害类型  
        onceDmgVal:100,          //单次伤害
        totalDmgMulLim:3,         //最大造成伤害倍率（即N次）  超出提前停止  
        attrST:{attrs:{hit:300}},    //技能属性修正
        radius:100,                  //选取半径
        trgProb:150,                  //攻击特效触发系数
        addPit:'chest',              //命中后特效附加点
        effectPath:'333/fireball.mdx', //命中后特效模型路径
        onceHit:true,               //是否只造成一次伤害
        physicDmgMul:0,           
        migicDmgMul:0, 
        dmgLvlFix:0.2,         
        arrowConfig:{                //投射物技能通用配置
            arrowUnitIdStr:'abx1',   //投射物单位id
            dis:50,                  //飞行距离   
            disPerSecond:100,        //飞行速度
            onceHitLimitDis:10       //每飞行X距离造成一次伤害判定
        },
        playerSkillField:{       //作为玩家技能使用的技能配置限制
            lType:'Q',                //是Q类技能(Q快捷键)
            lvlUpExpParams:2      //升级经验参数
        },
        impClass:FireBallA,           //具体实现类
        learnIconPath:"ReplaceableTextures\\CommandButtons\\BTNScatterRockets.blp"
    },
    'BKBA':{
        name:'天神下凡',
        desc:'魔法免疫，增强力量',
        skillType:'imdmg',       //技能类型
        dmgTypeKey:'nothing',       //伤害类型  
        onceDmgVal:100,          //单次伤害
        totalDmgMulLim:3,         //最大造成伤害倍率（即N次）  超出提前停止  
        attrST:{attrs:{hit:300}},    //技能属性修正
        radius:100,                  //选取半径
        trgProb:150,                  //攻击特效触发系数
        addPit:'chest',              //命中后特效附加点
        effectPath:'333/fireball.mdx', //命中后特效模型路径
        onceHit:true,               //是否只造成一次伤害
        physicDmgMul:0,           
        migicDmgMul:0, 
        dmgLvlFix:0.2,         
        arrowConfig:{                //投射物技能通用配置
            arrowUnitIdStr:'abx1',   //投射物单位id
            dis:50,                  //飞行距离   
            disPerSecond:100,        //飞行速度
            onceHitLimitDis:10       //每飞行X距离造成一次伤害判定
        },
        playerSkillField:{       //作为玩家技能使用的技能配置限制
            lType:'Q',                //是Q类技能(Q快捷键)
            lvlUpExpParams:2      //升级经验参数
        },
        impClass:FireBallA,           //具体实现类
        learnIconPath:"ReplaceableTextures\\PassiveButtons\\PASBTNUpgradeMoonGlaive.blp"
    },
    'SHOJ':{
        name:'袖箭',
        desc:'暗器啊暗器',
        skillType:'imdmg',       //技能类型
        dmgTypeKey:'nothing',       //伤害类型  
        onceDmgVal:100,          //单次伤害
        totalDmgMulLim:3,         //最大造成伤害倍率（即N次）  超出提前停止  
        attrST:{attrs:{hit:300}},    //技能属性修正
        radius:100,                  //选取半径
        trgProb:150,                  //攻击特效触发系数
        addPit:'chest',              //命中后特效附加点
        effectPath:'333/fireball.mdx', //命中后特效模型路径
        onceHit:true,               //是否只造成一次伤害
        physicDmgMul:0,           
        migicDmgMul:0, 
        dmgLvlFix:0.2,         
        arrowConfig:{                //投射物技能通用配置
            arrowUnitIdStr:'abx1',   //投射物单位id
            dis:50,                  //飞行距离   
            disPerSecond:100,        //飞行速度
            onceHitLimitDis:10       //每飞行X距离造成一次伤害判定
        },
        playerSkillField:{       //作为玩家技能使用的技能配置限制
            lType:'Q',                //是Q类技能(Q快捷键)
            lvlUpExpParams:2      //升级经验参数
        },
        impClass:FireBallA,           //具体实现类
        learnIconPath:"ReplaceableTextures\\PassiveButtons\\PASBTNUpgradeMoonGlaive.blp"
    },
    'DILE':{
        name:'地雷',
        desc:'暗器啊暗器2',
        skillType:'imdmg',       //技能类型
        dmgTypeKey:'nothing',       //伤害类型  
        onceDmgVal:100,          //单次伤害
        totalDmgMulLim:3,         //最大造成伤害倍率（即N次）  超出提前停止  
        attrST:{attrs:{hit:300}},    //技能属性修正
        radius:100,                  //选取半径
        trgProb:150,                  //攻击特效触发系数
        addPit:'chest',              //命中后特效附加点
        effectPath:'333/fireball.mdx', //命中后特效模型路径
        onceHit:true,               //是否只造成一次伤害
        physicDmgMul:0,           
        migicDmgMul:0, 
        dmgLvlFix:0.2,         
        arrowConfig:{                //投射物技能通用配置
            arrowUnitIdStr:'abx1',   //投射物单位id
            dis:50,                  //飞行距离   
            disPerSecond:100,        //飞行速度
            onceHitLimitDis:10       //每飞行X距离造成一次伤害判定
        },
        playerSkillField:{       //作为玩家技能使用的技能配置限制
            lType:'Q',                //是Q类技能(Q快捷键)
            lvlUpExpParams:2      //升级经验参数
        },
        impClass:FireBallA,           //具体实现类
        learnIconPath:"ReplaceableTextures\\CommandButtons\\BTNGoblinLandMine.blp"
    },
}

export const DOTSkillConfig:DOTSkillConfigRecord={
   'IFXX':{
        name:'毒气（单体）',
        skillType:'dot',
        dmgTypeKey:'poison',
        durationSec:12,
        intervalSec:3,
        onceDmgVal:30,
        attrST:{attrs:{hit:100}},
        radius:1,
        trgProb:30,
        addPit:'chest',
        effectPath:'333/dudu3.mdx',
        onceHit:true,
        physicDmgMul:0,
        migicDmgMul:0.2,
        dmgLvlFix:0.2,         
        impClass:FireBallA
    }
}

